from langchain_openai import ChatOpenAI
from ..config import Settings
# from langchain.prompts import PromptTemplate  # 不再需要
from ..tools import bing_tool, gl_forum_tool
from langgraph.prebuilt import create_react_agent



class IntentAgent:
    def __init__(self, settings=None):
        if settings is None:
            settings = Settings()
        
        self.settings = settings
        self.llm = ChatOpenAI(
            base_url=settings.openai_base_url,
            api_key=settings.openai_api_key,
            model=settings.openai_model,
            temperature=0
        )
        self.tools = [bing_tool, gl_forum_tool]
        
        # 使用现代方式绑定工具
        self.llm_with_tools = self.llm.bind_tools(self.tools)

        # 定义系统消息
        system_message = """请判断用户的意图，同时调用相关工具解答用户的问题。
        意图分类：
        1. 标题生成
        2. 内容摘要
        3. 其他
        请返回用户的意图分类(只返回分类编号)以及对用户问题的回答(如果有)。
        格式：
        意图分类：<分类编号>
        回答：<用户问题的回答>

        例如：
        用户输入：生成标题
        意图分类：1
        回答：
        用户输入：摘要内容
        意图分类：2
        回答：
        用户输入：其他
        意图分类：3
        回答：
        用户输入：生成标题，标题数量为3 什么是AI
        意图分类：1
        回答：AI的定义
        用户输入：摘要内容，摘要长度为100
        意图分类：2
        回答：
        """

        self.agent_executor = create_react_agent(self.llm, self.tools, prompt=system_message)


        # 使用现代方式：直接使用llm_with_tools
        self.chain = self.llm_with_tools
    
    def process(self, content):
        """处理用户输入并返回结果"""
        # result = self.chain.invoke({"content": content})
        # return result
        input_message = {"role": "user", "content": content}
        result = self.agent_executor.invoke({"messages": [input_message]})
        for message in result["messages"]:
            message.pretty_print()

        return result

        

# 测试IntentAgent
if __name__ == "__main__":
    intent_agent = IntentAgent()
    # 使用现代方式调用
    ai_msg = intent_agent.process("生成标题，标题数量为3 什么是AI")
    print(f"工具调用: {ai_msg.tool_calls}")
    print(f"回答内容: {ai_msg.content}")
    print(f"完整消息: {ai_msg}")



        
